package Lists.SinglyLinkedList;
//时间复杂度：O(n),空间复杂度O(1)
public class p1_reserve2 {
    //和上面那个新建链表不同，这个方法直接使用了两个相关的指针进行原地链表的反转
    public static void reserve(listNode head) {
        listNode pre=null;//指向已经反转部分的头节点
        listNode next = null;//指向保存下一个待处理的节点
        while (head != null) {
            next=head.next;//记录下一个值，防止下一步的操作造成数据的丢失
            head.next = pre;//反转当前节点的指针
            pre=head;//更新已经反转部分的头节点
            head=next;//更新链表节点，将其转到下一个节点
        }
    }
}
/*
* 可视化示例（反转 1 -> 2 -> 3 -> null）
* 初始: pre = null, head = 1 -> 2 -> 3 -> null
第1次循环:
  next = 2          (保存 head.next)
  1 -> null         (head.next = pre)
  pre = 1           (更新 pre)
  head = 2          (移动到 next)
状态: pre = 1 -> null, head = 2 -> 3 -> null
第2次循环:
  next = 3
  2 -> 1 -> null
  pre = 2
  head = 3
状态: pre = 2 -> 1 -> null, head = 3 -> null
第3次循环:
  next = null
  3 -> 2 -> 1 -> null
  pre = 3
  head = null
终止循环，返回 pre = 3 -> 2 -> 1 -> null*/